/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package educar.models;

import educar.db.JPA;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 *
 * @author gaston
 */
public class Docente {
   
    //Atributo usado para cear una instancia que contenga un query
    private static JPA jpa = new JPA();
    
    //Cadena usada para almacenar el dni de un docente.
    private String dni;
    
    //Cadena usada para almacenar nombre y el apellido de un docente.
    private String nombreYApellido;
    
    //Cadena usadada para almacenar la direccion de un docente
    private String direccion;

    
    /**
     * <hr>
     * Docente(): Contructor con parametros de la clase Docente.
     * <hr>
     * @param dnid
     * @param nombreyapellidod
     * @param direcciond 
     */
    public Docente(String dnid, String nombreyapellidod, String direcciond) {
        this.dni = dnid;
        this.direccion = direcciond;
        this.nombreYApellido = nombreyapellidod;
    }//Fin del metodo Docente().
     
    
    
    
    /**
     * <hr>
     * Docente(): Constructor que recibe como parametro un vector que contiene
     * los datos personales del docente.
     * <hr>
     * @param arreglo 
     */
    public Docente(String[] arreglo){
        this.setDni(arreglo[0]);
        this.setNombreYApellido(arreglo[1]);
        this.setDireccion(arreglo[2]);
    }//Fin del metodo Docente(String[])
    
    
    /**
     * <hr>
     * existe(): Sirve para poder verificar si el docente existe o no
     * <hr>
     * @param dnid
     * @return boolean
     */
    public static boolean exist(String dnid){
        try{
            Docente.getDocentePorDni(dnid);
            return true;
        } 
        catch (DocenteNotFound ex){
            return false; 
        }
    }//Fin del metodo exist()
    

    /**
     * 
     * @return dni
     */
    public String getDni() {
	return dni;
    }
        
    
    /**
     * 
     * @param dni 
     */
    public void setDni(String dni) {
	this.dni = dni;
    }

        
    /**
     * 
     * @return nombreYApellido
     */
    public String getNombreYApellido() {
	return nombreYApellido;
    }

        
    /**
     * 
     * @param nombreYApellido 
     */
    public void setNombreYApellido(String nombreYApellido) {
	this.nombreYApellido = nombreYApellido;
    }

        
    /**
     * 
     * @return direccion
     */
    public String getDireccion() {
	return direccion;
    }

        
    /**
     * 
     * @param direccion 
     */
    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }
    
    
    
    /**
     * <hr>
     * save():Intenta obtener un docente de la base de datos si lo logra retorna false ,
     * por cualquier problema que ocurra al intentar obtenerlo tambien retorna false, 
     * pero si logra ingresar el docente retorna true.
     * <hr>
     * @return boolean
     */
    public boolean save() {
        //Se intenta obtener un docente
        try {
            Docente.getDocentePorDni(dni);
            return false;
        } //No se pudo obtener un docente entonces se intenta ingresar
        catch (DocenteNotFound e1) { 
            String[] columns = { "DNI", "apellidoYnombre", "direccion" };
            PreparedStatement stm = jpa.newRecord("educar_dev.docente", columns);
            
            try {//Intenta setear estos datos
                stm.setString(1, dni);
                stm.setString(2, nombreYApellido);
                stm.setString(3, direccion);
            } catch (SQLException e) {//Ocurrio un error al intentar ingresar el docente
                e.printStackTrace();
                return false;
            }
            jpa.create(stm); //Inserta el docente
            return true;
	}
    }//Fin del metodo save()
    
      
    /**
     * <hr> 
     * destroy(): Usado para eliminar un docente de la base de datos
     * <hr>
     */
    public void destruir() {
        jpa.destroy("docente", "DNI", this.getDni());
    }
    

    /**
     * <hr>
     * destruirDocentePorDni(): Metodo estatico usado para eliminar un elemento de la base de datos
     * <hr>
     * @param dni 
     */
    public static void destruirDocentePorDni(String dni){
        jpa.destroy("docente", "DNI", dni);
    }

    
    /**
     * <hr>
     * setDocentePorDni(): Esta clase modifica a un docente usando su dni
     * <hr>
     * @param dniD 
     */
     public boolean setDocentePorDni(String dniDocente){
        jpa.update("docente", "apellidoYNombre", nombreYApellido, "dni", dniDocente);
        jpa.update("docente", "direccion", direccion, "dni", dniDocente);
        jpa.update("docente", "dni", dni, "dni", dniDocente);
        return true;
    }//Fin de la clase setDocentePorDni(String dniD)
    
    
    /**
     * <hr>
     * getDocentePordni(): Dado el dni de un docente, consulto la base de datos
     * usando este dni para obtener todos los datos del mismo, en el caso que este 
     * no se encuentre lanza una excepcion DocenteNotFound.
     * <hr>
     * @param dniD
     * @return docente
     * @throws DocenteNotFound 
     */
    public static Docente getDocentePorDni(String dniD) throws DocenteNotFound {
        //Consulto en la base de datos la tabla docente, usando dni como clave
        ResultSet resultadoConsulta = null;
        resultadoConsulta = jpa.getByField("docente", "dni", dniD); 
	
        Docente docente = null;
	try {
            if (resultadoConsulta.next()) {
                docente = new educar.models.Docente(resultadoConsulta.getString(1), resultadoConsulta.getString(2), resultadoConsulta.getString(3));
            } else{
                throw new DocenteNotFound();
            }
	} catch (SQLException e) {
	e.printStackTrace();
        }
        return docente;
    }//Fin del metodo getDocentePorDni().

    
}//Fin de la clase Docente.